Entity Framework (EF) Core তে Shadow Properties এবং Backing Fields হল এমন দুটি বৈশিষ্ট্য যা মডেল কনফিগারেশন এবং ডেটাবেস সঞ্চয়ের ক্ষেত্রে বিশেষভাবে গুরুত্বপূর্ণ। এগুলি ডেটা মডেল এবং ডেটাবেসের মধ্যে সম্পর্ক প্রতিষ্ঠা করতে এবং কার্যকরীভাবে ডেটাবেস পরিচালনা করতে সহায়তা করে।
Shadow Properties
Shadow Properties এমন প্রপার্টি যা Entity ক্লাসে সংজ্ঞায়িত করা হয় না, তবে EF Core ডেটাবেসের জন্য এটি তৈরি করে। এই প্রপার্টি আপনার ক্লাসের অংশ না হয়েও Entity Framework দ্বারা ট্র্যাক করা এবং ম্যানেজ করা হয়। Shadow Properties মূলত তখন ব্যবহৃত হয় যখন আপনার মডেলে কোন নির্দিষ্ট প্রপার্টি প্রদর্শন করা বা ম্যানেজ করা প্রয়োজন না, কিন্তু ডেটাবেসে সেই প্রপার্টি থাকতে হবে।
Shadow Properties এর ব্যবহার
EF Core তে Shadow Properties তৈরি করার জন্য, আপনি OnModelCreating মেথডে modelBuilder ব্যবহার করে এই প্রপার্টি কনফিগার করতে পারেন।
উদাহরণ:
ধরা যাক, আপনি Order ক্লাসে একটি LastModified প্রপার্টি যুক্ত করতে চান, কিন্তু আপনি এই প্রপার্টি ক্লাসের মধ্যে সংজ্ঞায়িত করতে চান না, বরং EF Core নিজেই তা ট্র্যাক করুক।
public class Order
{
public int OrderId { get; set; }
public string OrderName { get; set; }
// LastModified property is a shadow property
}
এখন OnModelCreating মেথডে LastModified নামে একটি Shadow Property তৈরি করা হবে:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Order>()
.Property<DateTime>("LastModified"); // Shadow Property
}
এখানে, LastModified প্রপার্টি Order ক্লাসে ডিফাইন করা হয়নি, কিন্তু EF Core এটি ডেটাবেসে একটি কলাম হিসেবে ট্র্যাক করবে।
Shadow Property এর অ্যাক্সেস
Shadow Properties অ্যাক্সেস করতে, EF.Property মেথড ব্যবহার করা হয়:
var lastModified = context.Entry(order).Property("LastModified").CurrentValue;
এভাবে, Shadow Property টির মান অ্যাক্সেস বা পরিবর্তন করা যায়।
Backing Fields
Backing Fields হল প্রাইভেট ফিল্ড যা একটি পাবলিক প্রপার্টি দ্বারা রিড বা রাইট করা হয়, কিন্তু EF Core ঐ প্রপার্টির মূল মানকে ট্র্যাক করার জন্য ফিল্ডটি ব্যবহার করে। এটি মূলত Encapsulation এর সুবিধা প্রদান করে, যেখানে আপনি প্রপার্টির মানের উপর নিয়ন্ত্রণ রাখতে পারেন কিন্তু ডেটাবেস স্তরে এই মানটি EF Core দ্বারা ম্যানেজ করা হয়।
EF Core তে Backing Fields ব্যবহার করার প্রধান উদ্দেশ্য হল, ডেটাবেসের সঙ্গে সম্পর্কিত কোন প্রপার্টি ম্যানিপুলেট করার সময় আপনি সেই প্রপার্টির getter বা setter মেথডের মধ্যে কাস্টম লজিক প্রয়োগ করতে পারেন।
Backing Fields এর ব্যবহার
EF Core এ Backing Fields কনফিগার করতে, আপনি সাধারণত HasField এবং UsePropertyAccessMode মেথড ব্যবহার করেন।
উদাহরণ:
ধরা যাক, আপনি Person ক্লাসে একটি প্রপার্টি FullName তৈরি করতে চান যা শুধুমাত্র FirstName এবং LastName ফিল্ড দ্বারা তৈরি হবে, তবে প্রপার্টি হিসাবে FullName প্রদর্শিত হবে।
public class Person
{
private string _fullName;
public string FirstName { get; set; }
public string LastName { get; set; }
// Backing field for FullName property
public string FullName
{
get => _fullName ?? $"{FirstName} {LastName}";
private set => _fullName = value;
}
}
এখানে, FullName প্রপার্টি FirstName এবং LastName ফিল্ডের মানের ওপর নির্ভরশীল, এবং FullName এর জন্য একটি Backing Field _fullName ব্যবহৃত হচ্ছে।
Backing Field কনফিগারেশন
এখন OnModelCreating মেথডে Backing Field কনফিগার করা যাবে:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Person>()
.Property(p => p.FullName)
.HasField("_fullName"); // Set the backing field for FullName
}
এভাবে, EF Core এই ফিল্ডটিকে ট্র্যাক করে, এবং যখন FullName পরিবর্তিত হয়, তখন _fullName ফিল্ডে পরিবর্তন ঘটে।
Shadow Properties এবং Backing Fields এর মধ্যে পার্থক্য
| বিষয় | Shadow Properties | Backing Fields |
|---|---|---|
| সংজ্ঞায়িত করা | ক্লাসে ডিফাইন করা হয় না, EF Core দ্বারা তৈরি হয়। | ক্লাসে প্রাইভেট ফিল্ড দিয়ে সংজ্ঞায়িত হয়। |
| কনফিগারেশন | modelBuilder.Property দিয়ে কনফিগার করা হয়। | modelBuilder.Property.HasField দিয়ে কনফিগার করা হয়। |
| ব্যবহার | ডেটাবেসে কলাম হিসাবে ব্যবহার করা হয়। | প্রপার্টি ও ফিল্ডের মধ্যে সম্পর্ক স্থাপন করা হয়। |
| অ্যাক্সেস | EF.Property মেথডের মাধ্যমে অ্যাক্সেস করা হয়। | সাধারণ প্রপার্টি getter ও setter মেথডের মাধ্যমে অ্যাক্সেস করা হয়। |
উপসংহার
Shadow Properties এবং Backing Fields উভয়ই EF Core এর জন্য শক্তিশালী টুলস যা আপনাকে ডেটাবেসের সঠিক ব্যবস্থাপনা এবং প্রপার্টির উপর নিয়ন্ত্রণ রাখতে সাহায্য করে। Shadow Properties ব্যবহার করে আপনি প্রপার্টি ছাড়া ডেটাবেস টেবিল তৈরি করতে পারবেন, যেখানে Backing Fields দিয়ে আপনি ডেটাবেস এবং মডেল লেভেলে কাস্টম লজিক প্রয়োগ করতে পারবেন।
Read more